import { createPinia, defineStore } from 'pinia'
import axios from 'axios'

const api = axios.create({ baseURL: 'http://localhost:3000' })

export const useStore = defineStore('main', {
  state: () => ({
    user: JSON.parse(localStorage.getItem('user')) || null,
    products: [],
    cart: JSON.parse(localStorage.getItem('cart')) || []
  }),
  actions: {
    // 获取商品列表
    async fetchProducts() {
      try {
        const res = await api.get('/products')
        this.products = res.data
      } catch (err) {
        console.error('获取商品列表失败：', err)
        alert('服务器连接失败，请检查服务器是否启动')
      }
    },

    // 根据ID获取单个商品
    async fetchProductById(id) {
      try {
        const res = await api.get(`/products/${id}`)
        return res.data
      } catch (err) {
        console.error('获取商品详情失败：', err)
        return null
      }
    },

    // 登录
    async login(username, password) {
      try {
        const res = await api.get(`/users?username=${username}&password=${password}`)
        if (res.data.length) {
          this.user = res.data[0]
          this.cart = this.user.cart
          localStorage.setItem('user', JSON.stringify(this.user))
          localStorage.setItem('cart', JSON.stringify(this.cart))
          return true
        }
        return false
      } catch (err) {
        console.error('登录请求失败：', err)
        alert('网络错误，请稍后再试')
        return false
      }
    },

    // 注册
    async register(username, password) {
      try {
        const users = await api.get(`/users?username=${username}`)
        if (users.data.length) return false
        const res = await api.post('/users', { username, password, cart: [] })
        this.user = res.data
        localStorage.setItem('user', JSON.stringify(this.user))
        return true
      } catch (err) {
        console.error('注册请求失败：', err)
        alert('网络错误，请稍后再试')
        return false
      }
    },

    // 退出登录
    logout() {
      this.user = null
      this.cart = []
      localStorage.removeItem('user')
      localStorage.removeItem('cart')
    },

    // 添加到购物车
    async addToCart(product) {
      if (!this.user) return false
      try {
        const item = this.cart.find(i => i.id === product.id)
        item ? item.quantity++ : this.cart.push({ ...product, quantity: 1 })
        await api.patch(`/users/${this.user.id}`, { cart: this.cart })
        localStorage.setItem('cart', JSON.stringify(this.cart))
        return true
      } catch (err) {
        console.error('添加购物车失败：', err)
        alert('操作失败，请稍后再试')
        return false
      }
    },

    // 从购物车删除
    async removeFromCart(id) {
      try {
        this.cart = this.cart.filter(item => item.id !== id)
        await api.patch(`/users/${this.user.id}`, { cart: this.cart })
        localStorage.setItem('cart', JSON.stringify(this.cart))
      } catch (err) {
        console.error('删除购物车商品失败：', err)
        alert('操作失败，请稍后再试')
      }
    },

    // 修改购物车商品数量
    async updateCartQuantity(productId, quantity) {
      if (!this.user) return false
      try {
        const item = this.cart.find(i => i.id === productId)
        if (item) {
          item.quantity = Math.max(1, quantity)
          await api.patch(`/users/${this.user.id}`, { cart: this.cart })
          localStorage.setItem('cart', JSON.stringify(this.cart))
        }
      } catch (err) {
        console.error('更新购物车数量失败：', err)
        alert('操作失败，请稍后再试')
      }
    }
  }
})

export default createPinia()
